using System;
using System.Runtime.Serialization;
using System.Collections.Generic;

namespace CoreEx.Samples.DomainModel
{

	/// <summary>
	/// A class that represents Employees.
	/// </summary>
	[Serializable]
	public class Employee
	{
		#region Private Members

		private IList<EmployeeTerritory> _employeeTerritories = new List<EmployeeTerritory>();
		private IList<Order> _orders = new List<Order>();

		#endregion

		/// <summary>
		/// Gets or sets the Employee ID
		/// </summary>
		public virtual int EmployeeID { get; set; }

		/// <summary>
		/// Gets or sets the Last Name
		/// </summary>
		public virtual string LastName { get; set; }

		/// <summary>
		/// Gets or sets the First Name
		/// </summary>
		public virtual string FirstName { get; set; }

		/// <summary>
		/// Gets or sets the Title
		/// </summary>
		public virtual string Title { get; set; }

		/// <summary>
		/// Gets or sets the Title Of Courtesy
		/// </summary>
		public virtual string TitleOfCourtesy { get; set; }

		/// <summary>
		/// Gets or sets the Birth Date
		/// </summary>
		public virtual DateTime? BirthDate { get; set; }

		/// <summary>
		/// Gets or sets the Hire Date
		/// </summary>
		public virtual DateTime? HireDate { get; set; }

		/// <summary>
		/// Gets or sets the Address
		/// </summary>
		public virtual string Address { get; set; }

		/// <summary>
		/// Gets or sets the City
		/// </summary>
		public virtual string City { get; set; }

		/// <summary>
		/// Gets or sets the Region
		/// </summary>
		public virtual string Region { get; set; }

		/// <summary>
		/// Gets or sets the Postal Code
		/// </summary>
		public virtual string PostalCode { get; set; }

		/// <summary>
		/// Gets or sets the Country
		/// </summary>
		public virtual string Country { get; set; }

		/// <summary>
		/// Gets or sets the Home Phone
		/// </summary>
		public virtual string HomePhone { get; set; }

		/// <summary>
		/// Gets or sets the Extension
		/// </summary>
		public virtual string Extension { get; set; }

		/// <summary>
		/// Gets or sets the Photo
		/// </summary>
		public virtual byte[] Photo { get; set; }

		/// <summary>
		/// Gets or sets the Notes
		/// </summary>
		public virtual string Notes { get; set; }

		/// <summary>
		/// Gets or sets the Photo Path
		/// </summary>
		public virtual string PhotoPath { get; set; }

		/// <summary>
		/// Gets the Employee Territories
		/// </summary>
		public IList<EmployeeTerritory> EmployeeTerritories 
		{
			get { return _employeeTerritories; }
		}

		/// <summary>
		/// Gets the Orders
		/// </summary>
		public IList<Order> Orders 
		{
			get { return _orders; }
		}

		/// <summary>
		/// Gets or sets the Parent Employee
		/// </summary>
		public virtual Employee ParentEmployee { get; set;}
	}
}
